#ifndef LCS_CALCULATOR_H
#define LCS_CALCULATOR_H

#include <iostream>
#include <string>
#include <vector>
#include <ctime>
#include <string>

using namespace std;

class LCS_Calculator{
    private:
        string *x;
        string *y;
        vector<vector<char>> b;  //用于辅助构造最优解
        vector<vector<int>> c;  //用于存放子序列长度
        int LCS_size;
        vector<vector<int>> leftup_point_stack; //用来存放所有可以画左上箭头的点
        vector<vector<vector<int>>> leftup_point_deep_table;    //对leftup_point_stack中的所有点按深度分类
        void Print_LCS(int i, int j, int n, char* path);
        void Print_Array(char* path, int len);
        void Print_All_LCS();
        void LCS_Length();
        int LCS_num = 0;

    public:
        LCS_Calculator();
        LCS_Calculator(string *px, string *py);
        void run();
};

#endif